package leetcode;

import java.util.Arrays;
import java.util.Stack;

//给定一个由整数组成的非空数组所表示的非负整数，在该数的基础上加一。
//最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
//你可以假设除了整数 0 之外，这个整数不会以零开头。
//示例 1:
//输入: [1,2,3]
//输出: [1,2,4]
//解释: 输入数组表示数字 123。
//示例 2:
//输入: [4,3,2,1]
//输出: [4,3,2,2]
//解释: 输入数组表示数字 4321。
public class problems_067 {

    public static void main(String[] arge) {
        new Solution().addBinary("1010","1011");
    }

    static class Solution {
        private final int NUMBER_BINARY = 2;
        public String addBinary(String a, String b) {
            Stack<Integer> retStack = new Stack<Integer>();
            int maxLength = Math.max(a.length(),b.length());
            int intCarry = 0;
            for (int i = 1; i <= maxLength; i++) {
                int num = getChar(a, a.length() - i) + getChar(b, b.length() - i) + intCarry;
                // 计算处理
                intCarry = num / NUMBER_BINARY;
                num = num % NUMBER_BINARY;
                retStack.push(num);
            }
            if(intCarry != 0) retStack.push(intCarry);
            StringBuffer strRet = new StringBuffer(32);
            while (!retStack.isEmpty()){
                strRet.append(retStack.pop());
            }
            System.out.println(strRet);
            return strRet.toString();
        }
        private int getChar(String str, int index){
            if(index < 0 || str.length() <= index) return 0;
            return str.charAt(index) - '0';
        }
    }
}
